package com.zjj.learn.designmodel.work.strategy;

public class StrategyTest {

    public static void main(String[] args) {
        //我们使用 解决方案2 来解决问题
        Question question = new Question(new Answer2());
        question.answer();
    }


    /**
     * 策略模式的主要角色如下：
     *
     * * 抽象策略（Strategy）类：这是一个抽象角色，通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
     * * 具体策略（Concrete Strategy）类：实现了抽象策略定义的接口，提供具体的算法实现或行为。
     * * 环境（Context）类：持有一个策略类的引用，最终给客户端调用。
     *
     * 策略模式的使用：
     * 当我们需要解决某个问题，假设这个问题有好几种解决方案，每一种解决方案的实现细节都不同，那么我们就可以就不同的解决方案封装成专门的算法
     *    在后续解决问题是只需要手动指定使用什么方案解决就可以切换解决方案了。
     *  具体的案例请见：{@link com.zjj.learn.designmodel.work.strategy}
     *    其中抽象策略：
     *           {@link com.zjj.learn.designmodel.work.strategy.Answer}
     *        具体策略：
     *           {@link com.zjj.learn.designmodel.work.strategy.Answer1}
     *           {@link com.zjj.learn.designmodel.work.strategy.Answer2}
     *        环境：
     *           {@link com.zjj.learn.designmodel.work.strategy.Question}
     *  策略模式相对来说是比较简单。容易理解的了
     *
     *  策略模式的基本特征：
     *      1、定义抽象策略类，提供抽象方法
     *      2、声明不同的具体策略，实现抽象方法
     *      3、声明所需环境，客户端调用。
     *      策略模式相对比较简单，需要将抽象策略聚合到环境类中，在实例化环境时，在构造器中致命所需要的解决策略方案即可。
     **/
}
